#include <linux/module.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/of_device.h>
#include <linux/kprobes.h>
#include <asm/traps.h>
#include <linux/kernel.h>
#include <linux/times.h>
#include <linux/delay.h>
#include <linux/notifier.h>

extern struct atomic_notifier_head	my_notifier_chain;
 
static int __init notifier_chain_recv_init(void)
{
    printk("%s\n", __func__);

    //会调用通知链上所有的notifier_block中的回调函数，也可以多次调用
    atomic_notifier_call_chain(&my_notifier_chain, 100, NULL);
    atomic_notifier_call_chain(&my_notifier_chain, 200, NULL);
    atomic_notifier_call_chain(&my_notifier_chain, 300, NULL);

    return 0;
}

static void __exit notifier_chain_recv_exit(void)
{
    printk("%s\n", __func__);
}

MODULE_LICENSE("GPL v2");
module_init(notifier_chain_recv_init);
module_exit(notifier_chain_recv_exit);